package com.squirrel.michale;

import java.util.Scanner;

/**
 * @author guanhao 观浩
 * @version v1.0.0.0
 * @createTime 2023/4/14 16:29
 * @company Michale Squirrel
 * @link
 * @description 题目描述
 * 给你一串未加密的字符串s，我们需要对字符串进行加密，我们通过对字符串的每一个字母进行改变来实现加密，改变方式是对字母进行一定量的偏移，这里我们偏移的意思是把这个字母变成排在自己后面的那个字母，例如a变成b，b变成c，c变成d，y变成z，特别地，z变成a。加密方式是在每一个字母s[i]偏移斐波拉契数列数a[i]的量，斐波拉契数列是a[1]=1,a[2]=1,a[i]=a[i-1]+a[i-2]，例如：原文 uvwxyz 加密后 vwyadh，其中偏移量分别是1,1,2,3,5,8。
 * <p>
 * 解答要求
 * 时间限制：2000ms, 内存限制：100MB
 * 输入
 * 第一行为一个整数T（1<=T<=1000），表示有T组测试数据。每组数据包含一行，有原文s（只含有小写字母，长度小于50）。
 * <p>
 * 输出
 * 每组测试数据输出一行，表示字符串的密文
 * <p>
 * 样例
 * 输入样例 1 复制
 * <p>
 * 2
 * uvwxyz
 * abcde
 * 输出样例 1
 * <p>
 * vwyadh
 * bcegj
 * 提示样例 1
 */


public class OnlineJudge294 {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        long[] fibonacci = getFibonacci();
        while (scanner.hasNext()) {
            int dataSize = Integer.parseInt(scanner.nextLine());
            for (int i = 0; i < dataSize; i++) {
                String str = scanner.nextLine();
                char[] chars = str.toCharArray();
                for (int k = 0; k < chars.length; k++) {
                    long index = chars[k] - 'a';
                    long pre = 'a' + (index + fibonacci[k] % 26L) % 26L;
                    if (pre > 'z') {
                        chars[k] = (char) (chars[k] - 26);
                    } else {
                        chars[k] = (char) pre;
                    }
                }
                String result = new String(chars);
                System.out.println(result);
            }
        }
    }

    private static long[] getFibonacci() {
        long[] fibonacci = new long[1000];
        fibonacci[0] = 1;
        fibonacci[1] = 1;
        for (int i = 0; i < 1000; i++) {
            if (i == 0 || i == 1) {
                fibonacci[i] = 1;
            } else {
                fibonacci[i] = fibonacci[i - 1] + fibonacci[i - 2];
            }
        }
        return fibonacci;
    }

}
